package ueditor.hunter

import org.apache.commons.io.FileUtils

import ueditor.util.PathFormat
import ueditor.defination.AppInfo
import ueditor.defination.BaseState
import ueditor.defination.MultiState
import ueditor.defination.State

class FileManager{

    private String dir = null
    private String rootPath = null
    private String[] allowFiles = null
    private int count = 0

    FileManager(Map<String,Object> conf){

        this.rootPath=(String)conf.get("rootPath")
        this.dir=this.rootPath+(String)conf.get("dir")
        this.allowFiles=this.getAllowFiles(conf.get("allowFiles"))
        this.count=(Integer)conf.get("count")

    }

    State listFile(int index){

        File dir = new File(this.dir)
        State state = null

        if(!dir.exists()){
            return new BaseState(false,AppInfo.NOT_EXIST)
        }

        if(!dir.isDirectory()){
            return new BaseState(false,AppInfo.NOT_DIRECTORY)
        }

        Collection<File> list = FileUtils.listFiles(dir,this.allowFiles,true)

        if(index<0||index>list.size()){
            state=new MultiState(true)
        }else{
            Object[] fileList = Arrays.copyOfRange(list.toArray(),index,index+this.count)
            state=this.getState(fileList)
        }

        state.putInfo("start",index)
        state.putInfo("total",list.size())

        return state

    }

    private State getState(Object[] files){

        MultiState state = new MultiState(true)
        BaseState fileState = null

        File file = null

        for(Object obj : files){
            if(obj==null){
                break
            }
            file=(File)obj
            fileState=new BaseState(true)
            fileState.putInfo("url",PathFormat.format(this.getPath(file)))
            state.addState(fileState)
        }

        return state

    }

    private String getPath(File file){

        String path = PathFormat.format(file.getAbsolutePath())

        return path.replace(this.rootPath,"/")

    }

    private String[] getAllowFiles(Object fileExt){

        String[] exts = null
        String ext = null

        if(fileExt==null){
            return new String[0]
        }

        exts=(String[])fileExt
        int len = exts.length
        for(int i = 0;i<len;i++){

            ext=exts[i]
            exts[i]=ext.replace(".","")

        }

        return exts

    }

}
